package org.gpp.proj1.particle.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Scanner;

/**
 * Classe que l� um arquivo com c�digo Java gerado pelo editor
 * de part�culas do jME e gera um arquivo de propriedades ao
 * molde dos dos arquivos de descri��o de part�culas.
 * @author Gustavo de Farias
 */
public class ParticleFileGenerator {

	/**
	 * L� um arquivo com c�digo Java gerado pelo editor de part�culas do jME e
	 * gera um arquivo de propriedades ao molde dos dos arquivos de descri��o de
	 * part�culas.
	 * @param editorFile O caminho para o arquivo com c�digo Java gerado pelo editor.
	 * @throws IOException Se houver erro ao tentar ler o arquivo do editor.
	 */
	public static void generateFromEditorFile(String editorFile) throws IOException {
		
		// Abre stream para o arquivo do editor.
		File originalFile = new File(editorFile);
		BufferedReader in = new BufferedReader(new FileReader(originalFile));
		Scanner scanner;
		
		// Abre stream para o arquivo a ser gerado.
		File generatedFile = new File("./res/particle/" + originalFile.getName() + ".par");
		PrintStream out = new PrintStream(generatedFile);
		
		out.println("# Generated from \"" + originalFile.getName() + "\"");
		out.println();
		
		// Come�a a recolher as chaves e valores e construir
		// o arquivo de descri��o de part�culas.
		scanner = new Scanner(in.readLine());
		out.println("ParticleNumber = " + scanner.findInLine("\\d+"));
		
		String linha;
		String key;
		String value;
		
		for (int i = 0; i < 2; i++) {
			linha = in.readLine();
			key = linha.substring(11, linha.indexOf("("));
			value = linha.substring(linha.indexOf("(", linha.indexOf("new")) + 1, linha.indexOf(")"));
			out.println(key + " = " + value);
		}
		
		for (int i = 0; i < 6; i++) {
			linha = in.readLine();
			key = linha.substring(11, linha.indexOf("("));
			value = linha.substring(linha.indexOf("(") + 1, linha.indexOf(")"));
			out.println(key + " = " + value);
		}
		
		for (int i = 0; i < 2; i++) {
			linha = in.readLine();
			key = linha.substring(11, linha.indexOf("("));
			value = linha.substring(linha.indexOf("(", linha.indexOf("new")) + 1, linha.indexOf(")"));
			out.println(key + " = " + value);
		}
		
		for (int i = 0; i < 6; i++) {
			linha = in.readLine();
			key = linha.substring(11, linha.indexOf("("));
			value = linha.substring(linha.indexOf("(") + 1, linha.indexOf(")"));
			out.println(key + " = " + value);
		}
		
		in.readLine();
		linha = in.readLine();
		key = linha.substring(8, linha.indexOf("("));
		value = linha.substring(linha.indexOf("(") + 1, linha.indexOf(")"));
		out.println(key + " = " + value);
		
		// Essa informa��o n�o � gerada pelo editor
		out.println("texture = res/textures/flaresmall.jpg");
		out.print("scale = 1.0f");
		
		// Fecha streams.
		in.close();
		out.flush();
		out.close();
	}
	
	/**
	 * Main para testes.
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		
		//ParticleFileGenerator.generateFromEditorFile(args[0]);
		ParticleFileGenerator.generateFromEditorFile("./res/particle/editor/fire");
		ParticleFileGenerator.generateFromEditorFile("./res/particle/editor/jet");
		ParticleFileGenerator.generateFromEditorFile("./res/particle/editor/smoke");
	}
}
